Критерий согласия Пирсона ( $\chi^2$)


In [1]:
import numpy as np
import pandas as pd

from scipy import stats

In [3]:
%pylab inline


Populating the interactive namespace from numpy and matplotlib

Исчерпанная рождаемость

Исчерпанная рождаемость — количество детей, родившихся у женщины на момент окончания конвенционального репродуктивного возраста (45 лет). Для 1878 женщин старше 45, участвовавших в социологическом опросе жителей Швейцарии, известно количество детей. Этот признак — типичный счётчик, а, значит, его можно попробовать описать распределением Пуассона.

  • выборка - целочисленный вектор длины $n$, характеризующий количество детей у опрашиваемой женщины
  • гипотеза $H_0$ - рассматриваемая величина имеет распределение Пуассона

In [4]:
fin = open('fertility.txt', 'r')
data = map(lambda x: int(x.strip()), fin.readlines())

In [5]:
data[:20]


Out[5]:
[0, 0, 2, 0, 2, 3, 2, 2, 2, 2, 1, 2, 0, 2, 0, 2, 3, 2, 2, 4]

In [6]:
pylab.bar(range(12), np.bincount(data), color = 'b', label = 'fertility_stat')
pylab.legend()


Out[6]:
<matplotlib.legend.Legend at 0x1166b6e90>

In [7]:
l = np.mean(data)
l


Out[7]:
1.9371671991480299

Критерий согласия


In [10]:
observed_frequences = np.bincount(data)
observed_frequences


Out[10]:
array([379, 262, 684, 353, 128,  35,  16,   8,  10,   1,   1,   1])

In [11]:
expected_frequences = [len(data)*stats.poisson.pmf(x, l) for x in range(min(data), max(data) + 1)]
expected_frequences


Out[11]:
[270.6416065637888,
 524.27804296009776,
 507.80711402791167,
 327.90242826296458,
 158.80045713800124,
 61.524607355489749,
 19.863908551586047,
 5.4971017275726499,
 1.3311006446292126,
 0.28650716750450117,
 0.055501228721053016,
 0.009774105435530582]

In [12]:
pylab.bar(range(len(expected_frequences)), expected_frequences, color = 'b', label = 'poisson_distr')
pylab.legend()


Out[12]:
<matplotlib.legend.Legend at 0x114273850>

Статистика критерия хи-квадрат: $$\chi^2=\sum_{i=1}^K \frac{\left(n_i- np_i\right)^2}{np_i}$$ При справедливости нулевой гипотезы имеет распределение хи-квадрат с числом степеней свободы $K-1-m$, где $m$ - число параметров распределения, оцененных по выборке.


In [13]:
stats.chisquare(observed_frequences, expected_frequences, ddof = 1)


Out[13]:
Power_divergenceResult(statistic=431.57522052849163, pvalue=1.7726131802335119e-86)